ambiguous grammar to unambiguous grammar in compiler design